%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A brief note: What follows is a small sampler of some of the exciting things we are doing on GEnie PSRT. Come visit us over on page 835!! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ************************************************************************ % ************************************************************************ % LaserWriter G Preliminary Snoop % ************************************************************************ % % SUMMARY: PSRT Guru Don Lancaster reviews his first impressions on the % LaserWriter G, including "secret" utilities to control the % photograde and resolution enhancements, an open font path % grabbing example routine, and full dictionary dumps. % % Portions reprinted from Don Lancaster's ASK THE GURU III. % % Copyright c 1991 by Don Lancaster. All rights reserved. % Free help line and additional info: (602) 428-4073. % % ************************************************************************ % Name of textfile: LASGNOTE.TXT % Source: SYNERGETICS % Author: Don Lancaster % Desc: LaserWriter G preliminary snoop % Date: December 15, 1991 % Release: 1.0 % Status: Copyright c 1991 by Don Lancaster and Synergetics. % 3860 West First Street, Thatcher, AZ. (602) 428-4073. % All commercial rights reserved. Personal use permitted % so long as this header remains present and intact. % PostScript Secrets Book + Disk costs $39.50. VISA/MC. % Approx length: 31K % % Keywords: PSRT, LaserWriter, G, Guru, PostScript, Photograde % Resolution Enhancement, utility % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOME PRELIMINARY LASERWRITER G SNOOOPING AROUND =============================================== by Don Lancaster Hoo Haw. And GOTCHA!! Apple purportedly has published a POSTSCRIPT ADDENDUM FOR THE LASERWRITER F and G. Unfortunately, after zillions of calls and email, I've yet to see a copy. And the LaserWriter G is TOTALLY USELESS without this document in any non-Mac environment. So, what follows is my preliminary snooping around to try and guess what has to be in the addendum. SOME VERY EARLY COMMENTS: ========================= The LaserWriter G is stunning real Adobe PostScript Level II on a Canon SX engine. You gotta have it NOW. Nothing else matters. Important advantages of level II include open font paths, full fax ability, filters, video compression, binary format, faster hex dumps, full forms capability, more color options, cacheable user paths, and a soft ice cream dispenser. Full details in the RED BOOK II, in stock here via [SYNERGETICS] email. The G is also the first sanely priced machine that lets you do medium to medium-high quality photographic halftones as a routine part of your laser printing. The G is an incredible memory hog in the photograde mode. Five megs isn't enough to print a full sheet. you need eight. You are allowed thirty-two. You can mix and match serial 19200 baud from an IBM or whatever with Appletalk from the Mac. Invisibly and on the fly. Just be sure to end each serial file with a [D]. The Zapf Dingbats are no longer ROM resident. You have to download them or get them off disk. There is a new Emulator font on which I am not yet clear. I didn't find any way to shut off the Photogray with the Mac utilities. Apparently you are only supposed to turn off the Photogray from an IBM or an Apple IIe. (see below). The comm buffer lengths and allowable number of stack entries in a proc are now much higher. The speed of the G is nice but not stunning. Meowwrrr, our puddy tat, prints in 24 seconds, compared to 36 on a turbo PS820. On the other hand, my histogramstuff is only slightly faster. I suspect the greatest improvements take place in character rendering and in non-linear clipping operations. Most users, of course, will SEVERELY baud rate themselves on the LaserWriter G, and, thus, all timing measurements (except those DIRECTLY running from hard disk files) will thus be TOTALLY MEANINGLESS. The edge enhancement is horizontal only, giving a pseudo 300x600 resolution. A special ethernet connector is needed before you can use ethernet. I do suspect that ethernet will be crippled by forced AppleTalk supervisory overhead. The timing results of other reviewers support this. My prediction is around 17 kilobaud effective for AppleTalk and 21 kilobaud effective for Ethernet, when running a typical PostScript 10K file. Or around a third of the speed of an Apple IIe game paddle port. Thus, hacked Shared SCSI comm is the ONLY fast way to talk to the G. The hard disk system is different enough that you have to reinitialize. But apparently the same commands remain. Apparently the font cache is now only allowed to be read from outside the server loop. The PhotoGrade looks great, but it might not work too well for camera ready output. It also requires adjustment and should use special toner. I suspect that plain old 600 x 600 is a SLIGHTLY better choice overall. But the QMS MR series is still stuck down on level I. The absence of a bolt-on duplex option is MONUMENTALLY STUPID. Duplexing ridiculously improves your throughput and stunningly adds to employee morale. Scrap rates are negligible and errors are far less. FONT PATHS ARE NOW FULLY OPEN! (see below) Some results follow in more or less random order... SETTING PHOTOGRADE AND RESOLUTION ENHANCEMENT: ============================================== First, here's about as blunt an instrument as you can get. There's no obvious way to "capture" outgoing mac commands from within the G utilities. Since most persistent value changing utilities start with a .... serverdict begin 0 exitserver I simply redefined "begin" to print the rest of the message! Like so... serverdict begin 0 exitserver % make it persistent 1000 string /strrx exch def % define a string /Helvetica findfont [10 0 0 10 0 0] makefont setfont % pick font /begin {currentfile strrx readline pop /msg exch def 50 300 moveto msg show showpage} def Nee nee naa naa noo noo noo. Also hoo boy. One minor gotcha: The utilities will not change something that does not need changed. So if something isn't readable (such as a PhotoGrade screen) change to another one and then try again. This was used to dump the key PhotoGrade and Resolution enhancement details. The key commands all reside in the --pagedevice-- dictionary Here is how to read the --pagedevice-- (or any other) dictionary... currentpagedevice {exch == == (\r) print flush} forall And here is what the dictionary looks like... /PostRenderingEnhance false /PreRenderingEnhance true /HWResolution [300 300] /MediaWeight -null- /Install {currentpagedevice dup /PreRenderingEnhanceDetails get /ActualPreRenderingEnhance get {/PreRenderingEnhanceDetails get /DefaultHalftone get /Halftone findresource} {pop << /SpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub} {dup mul exch dup mul add 1 exch sub} ifelse} /HalftoneType 1 /Frequency 60 /Angle 45 >>} ifelse sethalftone {} settransfer false setstrokeadjust /DefaultColorRendering /ColorRendering findresource setcolorrendering} /NumCopies -null- /InputAttributes -dict- /ManualFeedTimeout 60 /PreRenderingEnhanceDetails -dict- /PageSize [612 792] /BeginPage {pop} /OutputFaceUp false /Policies -dict- /ExitJamRecovery false /ManualFeed false /EndPage {exch pop 2 ne} /ImagingBBox -null- /OutputPage true /MediaType -null- /Margins [0 0] /MediaColor -null- Note that PreRenderingEnhance is the Photograde and PostRenderingEnhance is the resolution enhancement Soooooo...... TO TURN ON THE RESOLUTION ENHANCEMENT: ====================================== serverdict begin 0 exitserver <>setpagedevice quit TO TURN OFF THE RESOLUTION ENHANCEMENT: ======================================= serverdict begin 0 exitserver <>setpagedevice TO TURN ON THE PHOTOGRADE: =========================== serverdict begin 0 exitserver <>setpagedevice quit TO TURN OFF THE PHOTOGRADE: =========================== serverdict begin 0 exitserver <>setpagedevice quit TO CHANGE THE SELECTED HALFTONE SCREENS: ======================================== The slider in the SET PHOTOGRADE Mac utility has five positions. From left to right they set screens of 53, 75, 83, 106, and 150 DPI 53 DOT, 45 DEGREE (leftmost slider) =================================== serverdict begin 0 exitserver <<<>>>setpagedevice quit 75 DOT, 0 DEGREE (slider left of center) ======================================== serverdict begin 0 exitserver <<<>>>setpagedevice 83 DOT, 56 DEGREE (center slider) =================================== serverdict begin 0 exitserver <<<>>>setpagedevice quit 106 DOT, 45 DEGREE (slider right of center and DEFAULT) ======================================================== serverdict begin 0 exitserver <<<>>>setpagedevice quit 150 DOT, 0 DEGREE (rightmost slider) ====================================== serverdict begin 0 exitserver <<<>>>setpagedevice quit HARD DISK COMMANDS ================== These should be the same as in the Apple White Book and in my ASK THE GURU reprints. Both Available via [SYNERGETICS] email. More on this later. FONT PATH GRABBING: ================== Grabbing font paths for perspective, star wars, etc, is trivially simple /Helvetica findfont [50 0 0 50 0 0] makefont setfont 0 0 moveto mark (T) false charpath {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx} pathforall ] cvx /tee exch def 100 200 moveto tee stroke showpage Needless to say, I will be going bonkers over this later. The trick to a nonlinear text transform is simply to intercept the four pathforall procs, and then substitute x' and y' for each x and y of each moveto, lineto, and for all six control points of each curveto. More details in LASERWRITER SECRETS and ASK THE GURU, available via [SYNERGETICS] email. Lots of characters are allowed in your font path, and you can easily change fonts on the fly. SOME DICTIONARY DUMPS ===================== Here's the contents of some of the dictionaries used in the LaserWriter G statusdict ========== /b5tray /setdefaulttimeouts /setpagestackorder jobname revision /lettertray /diskstatus /manualfeed /setprintername /sccbatch /legaltray /setsoftwareiomode /margins /setsccinteractive /setmargins /printername /a4tray /realformat /checkpassword /byteorder product /defaulttimeouts /setuserdiskpercent /diskonline /pagestackorder /ramsize waittimeout /setdosysstart /setjobtimeout /dosysstart /pagecount /jobtimeout /initializedisk /hardwareiomode /softwareiomode buildtime /setdostartpage /sethardwareiomode /sccinteractive /emulate /userdiskpercent /dostartpage appletalktype /setsccbatch systemdict ========== /eexec /setfont /flush /rectstroke /== /stroke /rotate /ge /rootfont /inueofill /stack /currentcolorspace /count /arct /exit /xyshow /invertmatrix /setshared /moveto /currentcolortransfer /writehexstring /executeonly /dict /def /currentglobal /countdictstack /filter /serialnumber /rcheck /dup /type /scheck /cshow /quit /executive /currentcmykcolor /fill /setcolorrendering /FontDirectory /flattenpath /setvmthreshold /flushfile /transform /ueofill /readonly revision /undefineuserobject /resyncstart /readstring /sin /ineofill /for /ISOLatin1Encoding /currentdash /resourceforall /setcachedevice2 /deletefile /arcto /findfont /end /vmstatus /setlinecap /loop /scale /pathforall /currentmiterlimit /currentstrokeadjust /search /setdash /currentpacking /gt /inustroke /currentdict /currentscreen /token /stop /SharedFontDirectory /repeat /=print /filenameforall /xshow /writestring /handleerror /getinterval /get /exec /currentflat /readline /round /errordict /packedarray /setpagedevice /currenttransfer /Run /setlinejoin /setcharwidth /clear /defaultmatrix /setfileposition /idiv /false /identmatrix /mark /setcachelimit /forall /cleardictstack /userdict /cvr /exch /widthshow /aload /currenthsbcolor /version /truncate /cachestatus /currentrgbcolor /awidthshow /arc /floor /wcheck /setcmykcolor /arcn /echo /devdismount /bind /uappend /eq /not /devforall /currentfile /cvi /noaccess /setsystemparams /currentsystemparams /currentobjectformat /currentcolorscreen /setlinewidth /realtime /<< /currentcacheparams /sethalftone /rectclip /eofill /currentgstate /yshow /string /copypage /if product /currentcolorrendering /internaldict /save /idtransform /start /currentmatrix /stopped /ustrokepath /cvn /] /astore /concatmatrix /gcheck /closepath /.error /findencoding /currentlinejoin /execdict /setundercolorremoval /stringwidth /ufill /neg /grestore /execform /selectfont /languagelevel /cvlit /execstack /undefineresource /initgraphics /cvs /bytesavailable /restore /where /setgstate /startjob /begin /definefont /newpath /usertime /currentlinewidth /null /devformat /StandardEncoding /setmatrix /ucache /currentpagedevice /erasepage /systemdict /roll /readhexstring /write /xcheck /maxlength /setglobal /atan /anchorsearch /image /known /setuserparams />> /= /setcachedevice /log /rmoveto /length /imagemask /upath /statusdict /undefinefont /closefile /translate /mul /clippath /array /add /rcurveto /execuserobject /[ /abs /currentlinecap /srand /index /store /rand /ifelse /currentdevparams /currentpoint /$error /strokepath /resourcestatus /undef /setmiterlimit /setoverprint /itransform /print /pstack /curveto /setpacking /show /inufill /ashow /countexecstack /grestoreall /makepattern /setcolorspace /GlobalFontDirectory /pop /scalefont /put /setblackgeneration /setscreen /instroke /xor /read /cvrs /setcolorscreen /charpath /setobjectformat /setcacheparams /pathbbox /counttomark /mod /currentundercolorremoval /vmreclaim /fileposition /ceiling /matrix /globaldict /concat /currenthalftone /currentcolor /renamefile /shareddict /initclip /glyphshow /setpattern /setcolor /setbbox /status /file /rlineto /defineuserobject /div /bitshift /currentoverprint buildtime /true /defineresource /lineto /dictstack /sqrt /initmatrix /run /copy /eoclip /settransfer /dtransform /setflat /rrand /exp /putinterval /cleartomark /nulldevice /colorimage /currentuserparams /setdevparams /showpage /ucachestatus /ustroke /infill /sub /setcolortransfer /resetfile /currentgray /load /makefont /setucacheparams /ln /currentshared /or /devstatus /devmount /findresource /=string /prompt /sethsbcolor /gstate /setgray /setrgbcolor /rectfill /currentfont /currentblackgeneration /setstrokeadjust /gsave /clip /ne /cos /writeobject /printobject /le /and /reversepath /lt /cvx /kshow execdict =========== /execdepth /idleproc /banner /nestprompt /binary /quitflag /checkquit /copyright /stmtfile serverdict ========== /emumode /exchdef /setrealdevice /duprealdevice /productexec /getjobstms /firstjobfileopen /timeoutdict /batchidleproc /curdflttimeouts /stdin /stdout /cleanupjob /firstjob /setstreams /jobend /execjob /exitserver /stdname /exechplj /server /productsetstreams /dexch /execmap /inserver /settimeouts /productinit /execpostscriptbatch Note: To access internaldict, you have to preceed it with the holiest of the most sacred of Adobe mantras, namely 1183615869. internaldict ============ /@ifor /InvalidFont /ForkStart /@exec /CircleFont /printerclose /hplj /vmbuildtime /@dictforall /resourceforall /@aborted /@definefont /getcategorydata /$trace /enableinterrupt /clearinterrupt /reallyenhanced /ErodeSW /@stopped /FlxProc /productdictname /ljtestpage /ylck /errordevice /engineclass /eCCRun /fontrun /disableinterrupt /CharMap /@arrayforall /@loop /@repeat /@exit /CCRun /@undefinefont /xlck /superexec /systempatch /emuprocdict /undefineresource /genericresourceforall /hpljcleanup /Magic /@run /setstdio /ResourceDir /resourcestatus /implicitresourceforall /genericresourcedir /@stringforall /lck FilterDict /LaserJetEmuDict /aborted /$pgdevicedict /paramsforall /defineresource /@rfor /StemSnapLength /defaultspotfunction /findresource /strtlck /LaserJetEmulatorVersion userdict ========== /b5 /bander /quit /a4 /note /serverdict /a4small /#copies /stretch /letter /legal /lettersmall /smooth4 filterdict ========== /RunLengthEncode /DCTEncode /ASCIIHexDecode /LZWEncode /ASCII85Decode /LZWDecode /NullEncode /RunLengthDecode /DCTDecode /SubFileDecode /ASCIIHexEncode /CCITTFaxDecode /ASCII85Encode /CCITTFaxEncode globaldict ========== (empty) % Related GEnie PSRT Downloads: % ============================ 109 -- Working with Raw PostScript 121 -- Filetypes in the PSRT 217 -- The Introduction File 245 -- PSRT cross-reference (use if you do NOT have a PS printer) 246 -- PSRT cross-reference (use if you HAVE a PS printer) 077 -- Book-on-Demand printing 120 -- What is PostScript? 220 -- The Gonzo Justification documentation file 310 -- PostScript for IBM tutorial 330 -- Master Names & Numbers List and Directory Builder %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Portions reprinted from Don Lancaster's ASK THE GURU III. % Available via [SYNERGETICS] email on GEnie. % Write or call for your free Laser Printing insider secrets brochure % and/or your free PostScript insider secrets brochure. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % FREE VOICE HELPLINE AND ADDITIONAL INFO: (602) 428-4073 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%